Sintáxis de MySQL

Guía interactiva para aprender sintaxis MySQL paso a paso: creación de tablas, relaciones, consultas, filtros, JOINs, transacciones, índices y buenas prácticas profesionales usando ejemplos reales con empleados, departamentos y proyectos.

Bloque 1 · Introducción

Dónde escribir SQL

En phpMyAdmin o MySQL Workbench puedes escribir consultas SQL directamente.

Pasos básicos

Comentarios SQL

-- Comentario corto

# Comentario alternativo

/* Comentario
   multilínea */
Los comentarios ayudan muchísimo a documentar consultas complejas.
Bloque 2 · Bases de datos

Crear y usar bases de datos

Crear base de datos

CREATE DATABASE empresa_corporativa;

Seleccionarla

USE empresa_corporativa;

Tipos de datos frecuentes

Tipo Uso
INT Números enteros
DECIMAL(10,2) Dinero
VARCHAR(80) Texto corto
TEXT Texto largo
DATE Fechas
BOOLEAN Verdadero/Falso
DECIMAL es mucho mejor que FLOAT para dinero.
Bloque 3 · CREATE TABLE

Crear tablas y restricciones

Tabla Empleados

CREATE TABLE empleados (

 id INT AUTO_INCREMENT PRIMARY KEY,

 nombre VARCHAR(60) NOT NULL,

 email VARCHAR(120) UNIQUE,

 salario DECIMAL(10,2),

 creado_en TIMESTAMP
 DEFAULT CURRENT_TIMESTAMP

);

Explicación

Las restricciones ayudan a evitar errores y datos inconsistentes.
Bloque 4 · Relaciones

Claves foráneas y relaciones

Tabla departamentos

CREATE TABLE departamentos (

 id INT AUTO_INCREMENT PRIMARY KEY,

 nombre VARCHAR(80)

);

Tabla proyectos

CREATE TABLE proyectos (

 id INT AUTO_INCREMENT PRIMARY KEY,

 empleado_id INT NOT NULL,

 nombre VARCHAR(100),

 presupuesto DECIMAL(10,2),

 FOREIGN KEY (empleado_id)
 REFERENCES empleados(id)

);

ON DELETE CASCADE

FOREIGN KEY (empleado_id)
REFERENCES empleados(id)
ON DELETE CASCADE

Si se elimina un empleado, también se eliminan automáticamente sus proyectos.

Sin claves foráneas pueden aparecer datos huérfanos.
Bloque 5 · INSERT

INSERT y carga de datos

Insert individual

INSERT INTO empleados
(nombre, email, salario)

VALUES
('Marta Ruiz',
'marta@empresa.com',
2800.00);

Insert múltiple

INSERT INTO departamentos
(nombre)

VALUES
('Finanzas'),
('Marketing'),
('Tecnología');

Insert sin columnas

INSERT INTO empleados

VALUES
(NULL,
'Lucas Díaz',
'lucas@empresa.com',
3100.00,
DEFAULT);
Es mejor indicar siempre los nombres de columnas.
Bloque 6 · SELECT

Consultas SELECT

Consultar todos los datos

SELECT * FROM empleados;

Consultar columnas concretas

SELECT nombre, salario
FROM empleados;

Alias

SELECT nombre AS trabajador,
salario AS sueldo
FROM empleados;

ORDER BY

SELECT *
FROM empleados
ORDER BY salario DESC;

LIMIT

SELECT *
FROM empleados
LIMIT 3;
LIMIT es muy útil para paginación y pruebas rápidas.
Bloque 7 · WHERE

Filtros y operadores

Comparaciones

SELECT *
FROM empleados
WHERE salario > 2500;
SELECT *
FROM empleados
WHERE salario >= 3000;

AND y OR

SELECT *
FROM empleados

WHERE salario > 2000
AND salario < 4000;

NOT

SELECT *
FROM empleados

WHERE NOT (salario = 0);

IS NULL

SELECT *
FROM empleados
WHERE email IS NULL;
NULL no se compara con "=". Se usa IS NULL.
Bloque 8 · LIKE

Búsquedas con LIKE

Empieza por

SELECT *
FROM empleados
WHERE nombre LIKE 'Mar%';

Contiene

SELECT *
FROM empleados
WHERE nombre LIKE '%Ruiz%';

Dominio de email

SELECT *
FROM empleados
WHERE email LIKE '%@empresa.com';

Un solo carácter

SELECT *
FROM empleados
WHERE nombre LIKE 'L_cas';
% representa cualquier cantidad de caracteres.
Bloque 9 · UPDATE y DELETE

Modificar y borrar registros

UPDATE

UPDATE empleados

SET salario = 3500

WHERE id = 2;

DELETE

DELETE FROM empleados
WHERE id = 4;

Peligro

UPDATE empleados
SET salario = 0;
Sin WHERE puedes modificar toda la tabla accidentalmente.
Bloque 10 · ALTER y DROP

Modificar estructura

Añadir columna

ALTER TABLE empleados

ADD telefono VARCHAR(20);

Modificar tipo

ALTER TABLE empleados

MODIFY telefono VARCHAR(30);

Renombrar columna

ALTER TABLE empleados

CHANGE telefono movil VARCHAR(30);

Eliminar columna

ALTER TABLE empleados

DROP COLUMN movil;

DROP TABLE

DROP TABLE proyectos;
DROP elimina estructura y datos permanentemente.
Bloque 11 · JOIN

JOIN y relaciones

INNER JOIN

SELECT
e.nombre,
d.nombre AS departamento

FROM empleados e

INNER JOIN departamentos d
ON e.id = d.id;

LEFT JOIN

SELECT
e.nombre,
p.nombre AS proyecto

FROM empleados e

LEFT JOIN proyectos p
ON e.id = p.empleado_id;

Diferencia

JOIN Resultado
INNER Solo coincidencias
LEFT Incluye registros sin coincidencia
LEFT JOIN es muy usado en auditorías y análisis.
Bloque 12 · Funciones agregadas

COUNT, SUM, AVG y GROUP BY

COUNT

SELECT COUNT(*)
AS total_empleados

FROM empleados;

SUM

SELECT SUM(salario)
AS suma_salarios

FROM empleados;

AVG

SELECT AVG(salario)
AS salario_medio

FROM empleados;

GROUP BY

SELECT
departamento_id,
COUNT(*) AS empleados

FROM empleados

GROUP BY departamento_id;

HAVING

SELECT
departamento_id,
COUNT(*) AS empleados

FROM empleados

GROUP BY departamento_id

HAVING COUNT(*) >= 3;
HAVING filtra grupos. WHERE filtra filas.
Bloque 13 · Subconsultas e índices

Subconsultas e índices

Subconsulta

SELECT *
FROM empleados

WHERE salario >

(SELECT AVG(salario)
FROM empleados);

Índice

CREATE INDEX
idx_empleados_email

ON empleados(email);

Ventajas de índices

Demasiados índices también ralentizan INSERT y UPDATE.
Bloque 14 · Buenas prácticas

Buenas prácticas profesionales

Consejo profesional

SELECT *
FROM empleados
WHERE id = 2;

Primero prueba con SELECT y después ejecuta UPDATE o DELETE.

La mayoría de errores graves en SQL ocurren por olvidar WHERE.

Mini-Test Final

1. ¿Qué hace AUTO_INCREMENT?

2. ¿Qué hace FOREIGN KEY?

3. ¿Qué devuelve LEFT JOIN?

4. ¿Qué hace GROUP BY?